﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Web;
using System.Net;
using System.Security.Cryptography;

namespace vkontakte_client
{
    public partial class Send_msg : Form
    {
        System.Collections.Generic.List<Message> MessageList = new System.Collections.Generic.List<Message>();
        public System.Collections.Generic.List<People> FriendList = new System.Collections.Generic.List<People>();
        public Send_msg()
        {
            InitializeComponent();
        }
        /// <summary>
        /// Подсчет MD5 от сообщения. MD5 требуется в качестве параметра GET-запроса, для предотвращения повторной отправки одинаковых сообщений.
        /// </summary>
        /// <param name="instr"> Строка, от которой требуется подсчитать хеш</param>
        /// <returns> MD5-хеш строки</returns>
        public string MD5Hash(string instr)
        {
            string strHash = string.Empty;

            foreach (byte b in new MD5CryptoServiceProvider().ComputeHash(Encoding.Default.GetBytes(instr)))
            {
                strHash += b.ToString("X2");
            }
            return strHash;
        } 
        /// <summary>
        /// Отправка сообщения из формы пользователю, идентификатор которого указан в форме.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button1_Click(object sender, EventArgs e)
        {
            /// <remarks>
            /// Подсчет хеш-функции от сообщения
            /// </remarks>
            string phash = MD5Hash(Msg_box.Text);
            /// <remarks>
            /// Get-запрос на отправку сообщения
            /// </remarks>
            Dictionary<string, string> out_res = Http.Get("messages.send", "uid=" + FriendList[GetFriends.SelectedIndex].uid + "&chat_id=" + FriendList[GetFriends.SelectedIndex].uid + "&message=" + Msg_box.Text + "&type=1&guid=" + phash);               
        }

        private void Send_msg_Load(object sender, EventArgs e)
        {
            FriendList = People.GetFriends(GlobalWars.User_id);
            foreach (People Man in FriendList)
            {
                GetFriends.Items.Add(Man.First_name + " " + Man.Last_name);                
            }
        }

        private void GetFriends_SelectedIndexChanged_1(object sender, EventArgs e)
        {
            PreviewIMG.Image = Image.FromStream(WebRequest.Create(FriendList[GetFriends.SelectedIndex].photo).GetResponse().GetResponseStream());
            MessagesBox.Items.Clear();
            MessageList = Message.GetHistory(FriendList[GetFriends.SelectedIndex].uid, 100);
            MessageList.Reverse();

            foreach (Message Msg in MessageList)
            {
               string str = Msg.Fields["body"];
                if (str.Length > 40)
                    str = str.Substring(0, 40);
               MessagesBox.Items.Add(str + "...");
               if (Msg.Fields["from_id"] == GlobalWars.User_id)
                {
                    MessagesBox.Items[MessagesBox.Items.Count - 1] = "                         " + MessagesBox.Items[MessagesBox.Items.Count - 1];
                }
                
            }
        }

        private void MessagesBox_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            MessageBox.Show(MessageList[MessagesBox.SelectedIndex].Fields["body"]);
        }

    }
}
